gusucode.com > LTE基带收发仿真系统matlab源码程序 > LTE baseband simulation/channel_est_real.m

    function HfreqCell = channel_est_real(Hcell,h,iUE)
% 功能:理想信道,计算用户所在子带上的频域信道
%      如果使用频域信道,则Hcell有效,h不可用
%      如果使用时域信道,则h有效,Hcell不可用
% 输入:
%      Hcell:频域信道矩阵
%          h:时域信道响应
%        iUE:第i个用户
% 输出:
%      HfreqCell: 第i个用户的频域信道矩阵
%
%  Author:		程式小组(徐萌 张妙 张晓庆)
%  Date:		2010-07-11
%  ==========================================================

global LTE_par

nTx = LTE_par.BS_par.nAnt; % BS 天线数
nRx = LTE_par.UE_par.nAnt; % UE 天线数
nRB = LTE_par.UE_par.nRB(iUE);
scPerRB = LTE_par.scPerRB;
RB_DL = LTE_par.RB_DL; % 下行可用资源块
FFT_SIZE = LTE_par.FFT_SIZE;
startCarr = LTE_par.schedule.startCarr(iUE);% 起始子载波位置
channelFreq = LTE_par.channelFreq; % 添加频域信道指示 true:频域信道 false:时域信道

% =========以下参数测试用=====================
% nTx = 1;
% nRB = 5;
% FFT_SIZE = 2048;
% scPerRB = 12;
% startCarr = 0;% 起始子载波位置
% ==========================================

% 发送的复值符号可用子载波位置
% availableCarr = [FFT_SIZE-RB_DL*scPerRB/2+1:FFT_SIZE 2:RB_DL*scPerRB/2+1];
% 信道估计得到的频域载波在此处没有显式频谱搬移,其过程包含在availableCarr中
availableCarr = [FFT_SIZE/2-RB_DL*scPerRB/2+1:FFT_SIZE/2,FFT_SIZE/2+2:FFT_SIZE/2+2+RB_DL*scPerRB/2-1];

nSubCarr = nRB*scPerRB; % 第iUE个用户占用的子载波数
HfreqCell = cell(nSubCarr,1);% 用户iUE占用载波位置

if channelFreq == true
    % 如果添加的是频域信道,则取出用户所在的子带的信道
    
    for occupyCarr = startCarr+1:nSubCarr+startCarr;
        HfreqCell{occupyCarr-startCarr} = Hcell{availableCarr(occupyCarr)};
    end
    
else
    % 如果添加的是时域信道,则对时域信道进行频域转换,并取出用户所在子带的信道
    Hfreq = zeros(nRx,nTx,FFT_SIZE);
    for iRx = 1:nRx
        for iTx = 1:nTx
            Hfreq(iRx,iTx,:) = fft(h(iRx,iTx,:),FFT_SIZE);
        end
    end
    for occupyCarr = startCarr+1:nSubCarr+startCarr;
        HfreqCell{occupyCarr-startCarr} = Hfreq(:,:,availableCarr(occupyCarr));
    end
end